package com.linktco.common.utils.excel.annotation;

import java.lang.annotation.*;

/**
 * 自定义导出Excel数据注解
 *
 * @author zhangnx
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
@Documented
public @interface Excel {
    /**
     * 导出到Excel中的名字.
     */
    String name() default "";

    /**
     * 导出时在excel中排序
     */
    int sort() default Integer.MAX_VALUE;

    /**
     * 日期格式, 如: yyyy-MM-dd(导出默认取第一个格式)
     */
    String[] dateFormat() default {};

    /**
     * 取值代理表达式,
     * (如: {"0:男","1:女","2:未知"})
     */
    String[] keyValueExp() default {};

    /**
     * 内容匹配代理表达式,
     * (如: {"${score}<60:不及格","${score}>=<60:及格"})
     */
    @Deprecated
    String[] matchExp() default {};


    /**
     * 计算代理表达式,
     * (如: "${number}*60"或者"${number}-${number1}")
     */
    @Deprecated
    String calculateExp() default "";


    /**
     * 导出类型（0数字 1字符串），选择数字类型时加前后缀无效
     */
    ColumnType cellType() default ColumnType.STRING;

    /**
     * 设置某列只能是固定值如：{"未婚","已婚"}
     */
    String[] combo() default {};

    /**
     * 导出时在excel中每个数据列的高度 单位为字符
     */
    short titleHeight() default 25;

    /**
     * 导出时在excel中每个数据列的高度 单位为字符
     */
    short height() default 25;

    /**
     * 导出时在excel中每个列的宽 单位为字符
     */
    double width() default 17;

    /**
     * 文字前缀,如￥ 100 变成￥100,加前缀后单元格格式只能是字符串型
     */
    String prefix() default "";

    /**
     * 文字后缀,如% 90 变成90%,加后缀后单元格格式只能是字符串型
     */
    String suffix() default "";

    /**
     * 导出操作当值为空时,字段的默认值
     */
    String defaultValue() default "";

    /**
     * 是否导出数据,有些情况需要保持为空,希望用户填写这一列.
     */
    boolean isExportData() default true;

    /**
     * 是否拥有下级，有时候我们的实体类中的字段是另一个实体类，而那个实体类的属性也加了此注解
     */
    boolean hasChildren() default false;
    boolean hasChildrenList() default false;

    /**
     * 是否自动统计数据,在最后追加一行统计数据总和(只能是number类型才能统计，否则报错)
     */
    boolean isStatistics() default false;



    /**
     * sheet密码（用于类上设置sheet保护密码,不需要保护的可以在设置 cellStyle.setLocked(false)）
     * @return
     */
    String sheetPwd() default "";
    /**
     * 水印内容
     * @return
     */
    String waterText() default"";
    /**
     * 水印密度
     * @return
     */
    int waterDensity() default 0;

    /**
     * 水印大小
     * @return
     */
    int waterSize() default 32;
    /**
     * 水印颜色(十六进制)
     * @return
     */
    String waterColor() default "#c0c0c0";

    enum ColumnType {
        NUMERIC(0), STRING(1);

        private final int value;

        ColumnType(int value) {
            this.value = value;
        }

        public int value() {
            return this.value;
        }
    }
}